home *** CD-ROM | disk | FTP | other *** search
/ Eagles Nest BBS 8 / Eagles_Nest_Mac_Collection_Disc_8.TOAST / Developer Tools⁄Additions / InsideBa1994 / InsideBasic-94 / IB 94 / Sound Mover / Sound Mover.bas next >
BASIC Source File  |  1994-01-25  |  9KB  |  358 lines

  1. WINDOW OFF:COORDINATE WINDOW
  2. DEF MOUSE=-1:CURSOR 4:WIDTH -2
  3. DEFSTR LONG
  4. '==============================================================
  5. 'Resources
  6. '==============================================================
  7. RESOURCES "Sound Mover.res"
  8. '==============================================================
  9. 'Equates
  10. '==============================================================
  11. DIM T,L,B,R
  12. DIM My,Mx
  13. True = NOT(False)
  14. DIM FAsc,FDes,FWid,FLead,Fht
  15. DIM 1 Cr$:Cr$= CHR$(13)
  16. '
  17. DIM ScrnT,ScrnL,ScrnB,ScrnR
  18. CALL GETWMGRPORT(WMgrPort&)
  19. BLOCKMOVE WMgrPort&+8,VARPTR(ScrnT),8
  20. '
  21. Arrow       =  0
  22. Watch       =  4
  23. Hand      = 1000
  24. '
  25. ButtonAct   =  1
  26. RefreshAct  =  5
  27. '
  28. DIM 63 FileName$(1)
  29. DIM FileVol(1)
  30. DIM FileResRef(1)
  31. DIM TopItem(1)
  32. DIM SelItem(1)
  33. DIM ActiveSide
  34. '
  35. GOTO"Queue"
  36. '
  37. '==============================================================
  38. 'Functions
  39. '==============================================================
  40. '
  41. LONG FN GetFht(GFFont,GFSize,GFFace,GFMode)
  42.   TEXT GFFont,GFSize,GFFace,GFMode
  43.   CALL GETFONTINFO(FAsc)
  44. END FN = FAsc+FDes+FLead
  45. '
  46. LONG FN ShowList(WhichSide)
  47.   T = 31
  48.   LONG IF WhichSide
  49.     L = 265:R = 394
  50.   XELSE
  51.     L = 21:R = 150
  52.   END IF
  53.   Fht = FN GetFht(0,12,0,0)
  54.   B = T + Fht
  55.   LONG IF LEN(FileName$(WhichSide))
  56.     StartElem = TopItem(WhichSide) + 1
  57.     FOR F = StartElem TO StartElem + 5
  58.       Temp$ = INDEX$(F,WhichSide)
  59.       CALL TEXTBOX(VARPTR(Temp$)+1,LEN(Temp$),T, 1)
  60.       LONG IF F = SelItem(WhichSide)
  61.         LONG IF WhichSide = ActiveSide
  62.           CALL BITCLR(#&938,0)
  63.           CALL INVERTRECT(T)
  64.         END IF
  65.       END IF
  66.       CALL OFFSETRECT(T,0,Fht)
  67.     NEXT
  68.     B = 126
  69.   XELSE
  70.     B = 126
  71.     CALL ERASERECT(T)
  72.   END IF
  73.   T=31
  74.   CALL INSETRECT(T,-1,-1)
  75.   CALL FRAMERECT(T)
  76.   Max = MEM(10+WhichSide)-6
  77.   IF Max < 1 THEN Max = 1
  78.   SCROLL BUTTON WhichSide+3,TopItem(WhichSide)+1,1,Max
  79. END FN
  80. '
  81. LONG FN ShowErr(TheMsg$)
  82.   CALL PARAMTEXT(TheMsg$,"","","")
  83.   X=FN STOPALERT(1,0)
  84. END FN
  85. '
  86. LONG FN CloseFile(WhichSide)
  87.   LONG IF LEN(FileName$(WhichSide))
  88.     LONG IF FileResRef(WhichSide)>0
  89.       CALL CLOSERESFILE(FileResRef(WhichSide))
  90.     END IF
  91.   END IF
  92.   FileName$(WhichSide) = ""
  93.   FileResRef(WhichSide) = 0
  94.   FN ShowList(WhichSide)
  95.   GOSUB"Fix Buttons"
  96.   BUTTON WhichSide+1,1,"Open"
  97. END FN
  98. '
  99. LONG FN OpenFile(WhichSide)
  100.   LONG IF LEN(FileName$(WhichSide))
  101.     FN CloseFile(WhichSide)
  102.   XELSE
  103.     Temp$ = FILES$(1,"",,Vol)
  104.     LONG IF LEN(Temp$)
  105.       SELECT Temp$
  106.         CASE PSTR$(&910)             'cur app
  107.           TheRef = -2
  108.           FN ShowErr("This utility can't open itself.")
  109.         CASE PSTR$(&AD8)             'system file
  110.           TheRef = -3
  111.           FN ShowErr("This utility can't open the System file.")
  112.         CASE ELSE
  113.           TheRef = FN OPENRFPERM(Temp$,Vol,3)
  114.       END SELECT
  115.       LONG IF TheRef < 0
  116.         LONG IF TheRef = -1
  117.           FN ShowErr("This file does not have a resource fork.")
  118.         END IF
  119.       XELSE
  120.         TheCount = FN COUNT1RESOURCES(CVI("snd "))
  121.         LONG IF TheCount = 0
  122.           FN ShowErr("This file doesn't have any sounds.")
  123.         XELSE
  124.           FileName$(WhichSide) = Temp$
  125.           FileResRef(WhichSide) = TheRef
  126.           FileVol(WhichSide) = Vol
  127.           TopItem(WhichSide) = 0
  128.           SelItem(WhichSide) = 1
  129.           ActiveSide = WhichSide
  130.           CLEAR INDEX$ WhichSide
  131.           CLEAR 5000,WhichSide
  132.           FOR F = 1 TO TheCount
  133.             SndHndl& = FN GET1INDRESOURCE(CVI("snd "),F)
  134.             LONG IF SndHndl&
  135.               CALL GETRESINFO(SndHndl&,ID,Type&,Temp$)
  136.               LONG IF Temp$ = ""
  137.                 Temp$ = "ID "+STR$(ID)
  138.               END IF
  139.               INDEX$(F,WhichSide) = Temp$
  140.             END IF
  141.           NEXT
  142.           BUTTON WhichSide + 1,1,"Close"
  143.           SelItem(WhichSide) = 1
  144.           FN ShowList(WhichSide)
  145.           GOSUB"Fix Buttons"
  146.           GOSUB"Show File Names"
  147.         END IF
  148.       END IF
  149.     END IF
  150.   END IF
  151. END FN
  152. '
  153. LONG FN GetSound
  154.   Temp$ = INDEX$(SelItem(ActiveSide),ActiveSide)
  155.   CurRes = FN CURRESFILE
  156.   CALL USERESFILE(FileResRef(ActiveSide))
  157.   SndHndl& = FN GET1NAMEDRESOURCE(CVI("snd "),Temp$)
  158.   LONG IF SndHndl& = 0
  159.     ID = VAL(MID$(Temp$,3))
  160.     SndHndl& = FN GET1RESOURCE(CVI("snd "),ID)
  161.   END IF
  162.   CALL USERESFILE(CurRes)
  163. END FN = SndHndl&
  164. '
  165. LONG FN AutoCursor(Fy,Fx)
  166.   ACResult = Arrow
  167.   LONG IF WINDOW(0)
  168.     ACPort& = WINDOW(14)
  169.     LONG IF ACPort&
  170.       LONG IF FN FINDCONTROL(Fy,ACPort&,ACHndl&)
  171.         ACResult = Hand
  172.       END IF
  173.     END IF
  174.   END IF
  175. END FN = ACResult
  176. '==============================================================
  177. "Queue"
  178. '==============================================================
  179. GOSUB"Build"
  180. ON BREAK  GOSUB"Break"
  181. ON DIALOG GOSUB"Dialog"
  182. ON MOUSE  GOSUB"Mouse"
  183. CURSOR Arrow
  184. '
  185. '==============================================================
  186. "Loop"
  187. '==============================================================
  188. '
  189. DIALOG ON :MOUSE ON :BREAK ON
  190. '                   The only place events are trapped
  191. DIALOG OFF:MOUSE OFF:BREAK OFF
  192. '
  193. OldCsr=NewCsr
  194. NewCsr=Arrow
  195. CALL GETMOUSE(My)
  196. NewCsr=FN AutoCursor(My,Mx)
  197. IF NewCsr<>OldCsr THEN CURSOR NewCsr
  198. '
  199. LONG IF KissOfDeath
  200.   IF ResRef>0 THEN CALL CLOSERESFILE(ResRef)
  201.   END
  202. END IF
  203.  
  204. GOTO"Loop"
  205. '
  206. '==============================================================
  207. "Dialog"
  208. '==============================================================
  209. Act=DIALOG(0):Ref=DIALOG(Act)
  210. '
  211. IF Act=RefreshAct THEN "Format Wnd"
  212. '
  213. LONG IF Act = ButtonAct
  214.   SELECT Ref
  215.     CASE 1,2:FN OpenFile(Ref-1)      'open
  216.     CASE 3,4                         'scroll
  217.       WhichSide = Ref - 3
  218.       TopItem(WhichSide) = BUTTON(Ref)-1
  219.       FN ShowList(WhichSide)
  220.     CASE 5                           'copy
  221.       SndHndl& = FN GetSound
  222.       LONG IF SndHndl&
  223.         CALL GETRESINFO(SndHndl&,ID,Type&,Temp$)
  224.         CALL DETACHRESOURCE(SndHndl&)
  225.         LONG IF ActiveSide
  226.           NewHome = 0
  227.         XELSE
  228.           NewHome = 1
  229.         END IF
  230.         CurRes = FN CURRESFILE
  231.         CALL USERESFILE(FileResRef(NewHome))
  232.         ID = FN UNIQUEID(CVI("snd "))
  233.         CALL ADDRESOURCE(SndHndl&,Type&,ID,Temp$)
  234.         CALL USERESFILE(CurRes)
  235.         IF Temp$ = "" THEN Temp$ = "ID "+STR$(ID)
  236.         LONG IF FN RESERROR = 0
  237.           INDEX$ I (1,NewHome) = Temp$
  238.           SelItem(NewHome) = 1
  239.           TopItem(NewHome) = 0
  240.           FN ShowList(NewHome)
  241.         END IF
  242.       END IF
  243.     CASE 6                           'remove
  244.       SndHndl& = FN GetSound
  245.       LONG IF SndHndl&
  246.         CALL RMVERESOURCE(SndHndl&)
  247.         OSErr = FN DISPOSHANDLE(SndHndl&)
  248.       END IF
  249.       INDEX$ D(SelItem(ActiveSide),ActiveSide)
  250.       LONG IF SelItem(ActiveSide)>1
  251.         SelItem(ActiveSide) = SelItem(ActiveSide) - 1
  252.       END IF
  253.       FN ShowList(ActiveSide)
  254.     CASE 7                           'play
  255.       SndHndl& = FN GetSound
  256.       IF SndHndl& THEN OSErr = FN SNDPLAY(0,SndHndl&,0)
  257.     CASE 8:GOSUB"Break"              'quit
  258.   END SELECT
  259. END IF
  260. RETURN
  261. '==============================================================
  262. "Mouse"
  263. '==============================================================
  264. Mact=MOUSE(0):Mx=MOUSE(1):My=MOUSE(2)
  265. '
  266. T=30:L=21:B=127:R=150
  267. Found = False
  268. SideWas = ActiveSide
  269. LONG IF FN PTINRECT(My,T)
  270.   Found = 1
  271. XELSE
  272.   L = 265:R = 394
  273.   LONG IF FN PTINRECT(My,T)
  274.     Found = 2
  275.   END IF
  276. END IF
  277. LONG IF Found
  278.   ActiveSide = Found - 1
  279.   LONG IF ActiveSide <> SideWas
  280.     FN ShowList(SideWas)
  281.   END IF
  282.   TheItem = (My - T)/Fht + TopItem(ActiveSide) + 1
  283.   LONG IF TheItem < MEM(10+ActiveSide)
  284.     LONG IF TheItem <> SelItem(ActiveSide) OR ActiveSide <> SideWas
  285.       SelItem(ActiveSide) = TheItem
  286.       FN ShowList(ActiveSide)
  287.       GOSUB"Fix Buttons"
  288.     END IF
  289.   END IF
  290. END IF
  291. IF FN BUTTON THEN "Mouse"
  292. RETURN
  293. '==============================================================
  294. "Break"
  295. '==============================================================
  296. '
  297. '
  298. FN CloseFile(0)
  299. FN CloseFile(1)
  300. KissOfDeath = True
  301. RETURN
  302. '=================
  303. "Build"
  304. '=================
  305. T = 0:L = 0:B = 180:R = 434:         'Set TLBR to window size
  306. '         Offset the rect to the center of the screen
  307. CALL OFFSETRECT(T,ScrnR/2-R/2,(ScrnB/2+8)-B/2)
  308. WINDOW 1,"",(L,T)-(R,B),-2
  309. BUTTON 1, 1,"Open",( 20, 138)-( 166, 158),1
  310. BUTTON 2, 1,"Open",( 264, 138)-( 410, 158),1
  311. SCROLL BUTTON 3,1,1,10,6,( 150, 30)-( 166, 127),0
  312. SCROLL BUTTON 4,1,1,10,6,( 394, 30)-( 410, 127),0
  313. BUTTON 5, 0,"Copy",( 172, 30)-( 256, 50),1
  314. BUTTON 6, 0,"Remove",( 172, 66)-( 256, 86),1
  315. BUTTON 7, 0,"Play",( 172, 102)-( 256, 122),1
  316. BUTTON 8, 1,"Quit",( 172, 138)-( 256, 158),1
  317. RETURN
  318. '=================
  319. "Format Wnd"
  320. '=================
  321. GOSUB"Show File Names"
  322. FN ShowList(0)
  323. FN ShowList(1)
  324. RETURN
  325.  
  326. '=================
  327. "Show File Names"
  328. '=================
  329. TEXT 3,9,0,0
  330. T = 12:L = 18:B = 24:R = 166
  331. Temp$ = FileName$(0)
  332. CALL TEXTBOX(VARPTR(Temp$)+1,LEN(Temp$),T, 1)
  333. L = 263:R = 411
  334. Temp$ = FileName$(1)
  335. CALL TEXTBOX(VARPTR(Temp$)+1,LEN(Temp$),T, 1)
  336. RETURN
  337. '=================
  338. "Fix Buttons"
  339. '=================
  340. LONG IF LEN(FileName$(0)) AND LEN(FileName$(1))
  341.   LONG IF ActiveSide
  342.     Temp$ = "«Copy«"
  343.   XELSE
  344.     Temp$ = "»Copy»"
  345.   END IF
  346.   BUTTON 5,1,Temp$
  347. XELSE
  348.   BUTTON 5,0
  349. END IF
  350. LONG IF LEN(FileName$(0)) OR LEN(FileName$(1))
  351.   BUTTON 6,1
  352.   BUTTON 7,1
  353. XELSE
  354.   BUTTON 6,0
  355.   BUTTON 7,0
  356. END IF
  357. RETURN
  358.